为您找到与排序命令sort使用实例介绍 linux教程相关的共200个结果:
sort命令的功能是对文件中的各行进行排序。sort命令有许多非常实用的选项,这些选项最初是用来对数据库格式的文件内容进行各种排序操作的。实际上,sort命令可以被认为是一个非常强大的数据管理工具,用来管理内容类似数据库记录的文件。小编为大家分享了排序命令sort使用实例介绍,下面大家跟着读文网小编一起来了解一下吧。
名称:sort
位置:/usr/bin/sort
权限:所有用户
用法: sort [OPTION]... [FILE]...
sort [OPTION]... --files0-from=F
选项:
-b --ignore-leading-blanks 忽略最前面的空格
-f --ignore-case fold lower case to upper case characters 忽略字母的大小写
-M --month-sort compare (unknown) < `JAN' < ... < `DEC' 以月份的名字来排序
-n --numeric-sort compare according to string numerical value 以纯数字排序 (默认以文本类型排序)
代码如下:
$ cat a
11
32
5
1
4
3</p> <p>$ sort a
1
11
3
32
4
5</p> <p>$ sort -n a
1
3
4
5
11
32</p> <p> -u --unique 相同的数据中,仅出现一行
$ cat a
1
3
5
1
3</p> <p>$ sort -u a
1
3
5
-t --field-separator=SEP use SEP instead of non-blank to blank transition 指定分隔符,默认以TAB为分隔符
-k --key=POS1[,POS2] start a key at POS1 (origin 1), end it at POS2 (default end of line). See POS syntax below
指定排序的区间
以冒号":"作为分隔符的第一个字段排序
代码如下:
head /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh</p> <p>$ head /etc/passwd| sort -t ":" -k 1
bin:x:2:2:bin:/bin:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
games:x:5:60:games:/usr/games:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
root:x:0:0:root:/root:/bin/bash
sync:x:4:65534:sync:/bin:/bin/sync
sys:x:3:3:sys:/dev:/bin/sh</p> <p>以下这个例子可以看出-n的重要性了
$ cat a
pa:11:a
sa:32:c
app:5:b
stort:1:d
pear:4:aa
hello:3:f</p> <p>$ cat a |sort -t ":" -k 2
pa:11:a
stort:1:d
sa:32:c
hello:3:f
pear:4:aa
app:5:b</p> <p>$ cat a |sort -t ":" -k 2 -n
stort:1:d
hello:3:f
pear:4:aa
app:5:b
pa:11:a
sa:32:c
看过“ 排序命令sort使用实例介绍 ”
浏览量:2
下载量:0
时间:
sort命令的功能是对文件中的各行进行排序。sort命令有许多非常实用的选项,这些选项最初是用来对数据库格式的文件内容进行各种排序操作的。那么Linux系统sort排序命令怎么使用呢?小编为大家分享了Linux系统sort排序命令的使用方法,下面大家跟着读文网小编一起来了解一下吧。
1 sort的工作原理
sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
[rocrocket@rocrocket programming]$ cat seq.txt
banana
apple
pear
orange
[rocrocket@rocrocket programming]$ sort seq.txt
apple
banana
orange
pear
2 sort的-u选项
它的作用很简单,就是在输出行中去除重复行。
[rocrocket@rocrocket programming]$ cat seq.txt
banana
apple
pear
orange
pear
[rocrocket@rocrocket programming]$ sort seq.txt
apple
banana
orange
pear
pear
[rocrocket@rocrocket programming]$ sort -u seq.txt
apple
banana
orange
pear
pear由于重复被-u选项无情的删除了。
3 sort的-r选项
sort默认的排序方式是升序,如果想改成降序,就加个-r就搞定了。
[rocrocket@rocrocket programming]$ cat number.txt
1
3
5
2
4
[rocrocket@rocrocket programming]$ sort number.txt
1
2
3
4
5
[rocrocket@rocrocket programming]$ sort -r number.txt
5
4
3
2
1
4 sort的-o选项
由于sort默认是把结果输出到标准输出,所以需要用重定向才能将结果写入文件,形如sort filename > newfile。
但是,如果你想把排序结果输出到原文件中,用重定向可就不行了。
[rocrocket@rocrocket programming]$ sort -r number.txt > number.txt
[rocrocket@rocrocket programming]$ cat number.txt
[rocrocket@rocrocket programming]$
看,竟然将number清空了。
就在这个时候,-o选项出现了,它成功的解决了这个问题,让你放心的将结果写入原文件。这或许也是-o比重定向的唯一优势所在。
[rocrocket@rocrocket programming]$ cat number.txt
1
3
5
2
4
[rocrocket@rocrocket programming]$ sort -r number.txt -o number.txt
[rocrocket@rocrocket programming]$ cat number.txt
5
4
3
2
1
5 sort的-n选项
你有没有遇到过10比2小的情况。我反正遇到过。出现这种情况是由于排序程序将这些数字按字符来排序了,排序程序会先比较1和2,显然1小,所以就将10放在2前面喽。这也是sort的一贯作风。
我们如果想改变这种现状,就要使用-n选项,来告诉sort,“要以数值来排序”!
[rocrocket@rocrocket programming]$ cat number.txt
1
10
19
11
2
5
[rocrocket@rocrocket programming]$ sort number.txt
1
10
11
19
2
5
[rocrocket@rocrocket programming]$ sort -n number.txt
1
2
5
10
11
19
6 sort的-t选项和-k选项
如果有一个文件的内容是这样:
[rocrocket@rocrocket programming]$ cat facebook.txt
banana:30:5.5
apple:10:2.5
pear:90:2.3
orange:20:3.4
这个文件有三列,列与列之间用冒号隔开了,第一列表示水果类型,第二列表示水果数量,第三列表示水果价格。
那么我想以水果数量来排序,也就是以第二列来排序,如何利用sort实现?
幸好,sort提供了-t选项,后面可以设定间隔符。(是不是想起了cut和paste的-d选项,共鸣~~)
指定了间隔符之后,就可以用-k来指定列数了。
[rocrocket@rocrocket programming]$ sort -n -k 2 -t : facebook.txt
apple:10:2.5
orange:20:3.4
banana:30:5.5
pear:90:2.3
我们使用冒号作为间隔符,并针对第二列来进行数值升序排序,结果很令人满意。#p#副标题#e#
7 其他的sort常用选项
-f会将小写字母都转换为大写字母来进行比较,亦即忽略大小写
-c会检查文件是否已排好序,如果乱序,则输出第一个乱序的行的相关信息,最后返回1
-C会检查文件是否已排好序,如果乱序,不输出内容,仅返回1
-M会以月份来排序,比如JAN小于FEB等等
-b会忽略每一行前面的所有空白部分,从第一个可见字符开始比较。
有时候学习脚本,你会发现sort命令后面跟了一堆类似-k1,2,或者-k1.2 -k3.4的东东,有些匪夷所思。今天,我们就来搞定它—-k选项!
1 准备素材
$ cat facebook.txt
google 110 5000
baidu 100 5000
guge 50 3000
sohu 100 4500
第一个域是公司名称,第二个域是公司人数,第三个域是员工平均工资。(除了公司名称,其他的别信,都瞎写的^_^)
2 我想让这个文件按公司的字母顺序排序,也就是按第一个域进行排序:(这个facebook.txt文件有三个域)
$ sort -t ‘ ‘ -k 1 facebook.txt
baidu 100 5000
google 110 5000
guge 50 3000
sohu 100 4500
看到了吧,就直接用-k 1设定就可以了。(其实此处并不严格,稍后你就会知道)
3 我想让facebook.txt按照公司人数排序
$ sort -n -t ‘ ‘ -k 2 facebook.txt
guge 50 3000
baidu 100 5000
sohu 100 4500
google 110 5000
不用解释,我相信你能懂。
但是,此处出现了问题,那就是baidu和sohu的公司人数相同,都是100人,这个时候怎么办呢?按照默认规矩,是从第一个域开始进行升序排序,因此baidu排在了sohu前面。
4 我想让facebook.txt按照公司人数排序 ,人数相同的按照员工平均工资升序排序:
$ sort -n -t ‘ ‘ -k 2 -k 3 facebook.txt
guge 50 3000
sohu 100 4500
baidu 100 5000
google 110 5000
看,我们加了一个-k2 -k3就解决了问题。对滴,sort支持这种设定,就是说设定域排序的优先级,先以第2个域进行排序,如果相同,再以第3个域进行排序。(如果你愿意,可以一直这么写下去,设定很多个排序优先级)
5 我想让facebook.txt按照员工工资降序排序,如果员工人数相同的,则按照公司人数升序排序:(这个有点难度喽)
$ sort -n -t ‘ ‘ -k 3r -k 2 facebook.txt
baidu 100 5000
google 110 5000
sohu 100 4500
guge 50 3000
此处有使用了一些小技巧,你仔细看看,在-k 3后面偷偷加上了一个小写字母r。你想想,再结合我们上一篇文章,能得到答案么?揭晓:r和-r选项的作用是一样的,就是表示逆序。因为sort默认是按照升序排序的,所以此处需要加上r表示第三个域(员工平均工资)是按照降序排序。此处你还可以加上n,就表示对这个域进行排序时,要按照数值大小进行排序,举个例子吧:
$ sort -t ‘ ‘ -k 3nr -k 2n facebook.txt
baidu 100 5000
google 110 5000
sohu 100 4500
guge 50 3000
看,我们去掉了最前面的-n选项,而是将它加入到了每一个-k选项中了。
6 -k选项的具体语法格式
要继续往下深入的话,就不得不来点理论知识。你需要了解-k选项的语法格式,如下:
[ FStart [ .CStart ] ] [ Modifier ] [ , [ FEnd [ .CEnd ] ][ Modifier ] ]
这个语法格式可以被其中的逗号(“,”)分为两大部分,Start部分和End部分。
先给你灌输一个思想,那就是“如果不设定End部分,那么就认为End被设定为行尾”。这个概念很重要的,但往往你不会重视它。
Start部分也由三部分组成,其中的Modifier部分就是我们之前说过的类似n和r的选项部分。我们重点说说Start部分的FStart和C.Start。
C.Start也是可以省略的,省略的话就表示从本域的开头部分开始。之前例子中的-k 2和-k 3就是省略了C.Start的例子喽。
FStart.CStart,其中FStart就是表示使用的域,而CStart则表示在FStart域中从第几个字符开始算“排序首字符”。
同理,在End部分中,你可以设定FEnd.CEnd,如果你省略.CEnd,则表示结尾到“域尾”,即本域的最后一个字符。或者,如果你将CEnd设定为0(零),也是表示结尾到“域尾”。
7 突发奇想,从公司英文名称的第二个字母开始进行排序:
$ sort -t ‘ ‘ -k 1.2 facebook.txt
baidu 100 5000
sohu 100 4500
google 110 5000
guge 50 3000
看,我们使用了-k 1.2,这就表示对第一个域的第二个字符开始到本域的最后一个字符为止的字符串进行排序。你会发现baidu因为第二个字母是a而名列榜首。sohu和 google第二个字符都是o,但sohu的h在google的o前面,所以两者分别排在第二和第三。guge只能屈居第四了。
8 又突发奇想,,只针对公司英文名称的第二个字母进行排序,如果相同的按照员工工资进行降序排序:
$ sort -t ‘ ‘ -k 1.2,1.2 -k 3,3nr facebook.txt
baidu 100 5000
google 110 5000
sohu 100 4500
guge 50 3000
由于只对第二个字母进行排序,所以我们使用了-k 1.2,1.2的表示方式,表示我们“只”对第二个字母进行排序。(如果你问“我使用-k 1.2怎么不行?”,当然不行,因为你省略了End部分,这就意味着你将对从第二个字母起到本域最后一个字符为止的字符串进行排序)。对于员工工资进行排 序,我们也使用了-k 3,3,这是最准确的表述,表示我们“只”对本域进行排序,因为如果你省略了后面的3,就变成了我们“对第3个域开始到最后一个域位置的内容进行排序” 了。
9 在modifier部分还可以用到哪些选项?
可以用到b、d、f、i、n 或 r。
其中n和r你肯定已经很熟悉了。
b表示忽略本域的签到空白符号。
d表示对本域按照字典顺序排序(即,只考虑空白和字母)。
f表示对本域忽略大小写进行排序。
i表示忽略“不可打印字符”,只针对可打印字符进行排序。(有些ASCII就是不可打印字符,比如a是报警,是退格,是换行,是回车等等)
10 思考思考关于-k和-u联合使用的例子:
$ cat facebook.txt
google 110 5000
baidu 100 5000
guge 50 3000
sohu 100 4500
这是最原始的facebook.txt文件。
$ sort -n -k 2 facebook.txt
guge 50 3000
baidu 100 5000
sohu 100 4500
google 110 5000
$ sort -n -k 2 -u facebook.txt
guge 50 3000
baidu 100 5000
google 110 5000
当设定以公司员工域进行数值排序,然后加-u后,sohu一行就被删除了!原来-u只识别用-k设定的域,发现相同,就将后续相同的行都删除。
$ sort -k 1 -u facebook.txt
baidu 100 5000
google 110 5000
guge 50 3000
sohu 100 4500
$ sort -k 1.1,1.1 -u facebook.txt
baidu 100 5000
google 110 5000
sohu 100 4500
这个例子也同理,开头字符是g的guge就没有幸免于难。
$ sort -n -k 2 -k 3 -u facebook.txt
guge 50 3000
sohu 100 4500
baidu 100 5000
google 110 5000
咦!这里设置了两层排序优先级的情况下,使用-u就没有删除任何行。原来-u是会权衡所有-k选项,将都相同的才会删除,只要其中有一级不同都不会轻易删除的:)(不信,你可以自己加一行sina 100 4500试试看)
11 最诡异的排序:
$ sort -n -k 2.2,3.1 facebook.txt
guge 50 3000
baidu 100 5000
sohu 100 4500
google 110 5000
以第二个域的第二个字符开始到第三个域的第一个字符结束的部分进行排序。
第一行,会提取0 3,第二行提取00 5,第三行提取00 4,第四行提取10 5。
又因为sort认为0小于00小于000小于0000….
因此0 3肯定是在第一个。10 5肯定是在最后一个。但为什么00 5却在00 4前面呢?(你可以自己做实验思考一下。)
答案揭晓:原来“跨域的设定是个假象”,sort只会比较第二个域的第二个字符到第二个域的最后一个字符的部分,而不会把第三个域的开头字符纳入比较范围。当发现00和00相同时,sort就会自动比较第一个域去了。当然baidu在sohu前面了。用一个范例即可证实:
$ sort -n -k 2.2,3.1 -k 1,1r facebook.txt
guge 50 3000
sohu 100 4500
baidu 100 5000
google 110 5000
12 有时候在sort命令后会看到+1 -2这些符号,这是什么东东?
关于这种语法,最新的sort是这么进行解释的:
On older systems, `sort’ supports an obsolete origin-zero syntax `+POS1 [-POS2]‘ for specifying sort keys. POSIX 1003.1-2001 (*note Standards conformance::) does not allow this; use `-k’ instead.
原来,这种古老的表示方式已经被淘汰了,以后可以理直气壮的鄙视使用这种表示方法的脚本喽!
(为了防止古老脚本的存在,在这再说一下这种表示方法,加号表示Start部分,减号表示End部分。最最重要的一点是,这种方式方法是从0开始计数的,以前所说的第一个域,在此被表示为第0个域。以前的第2个字符,在此表示为第1个字符。明白?)
看过“ Linux系统sort排序命令怎么使用 ”
浏览量:2
下载量:0
时间:
sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出。如果 File 参数指定多个文件,那么 sort 命令将这些文件连接起来,并当作一个文件进行排序。-(减号)代替文件名指定标准输入。如果您不指定任何文件名,那么该命令对标准输入排序。可以使用 -o 标志指定输出文件。那么在Linux系统中,怎么使用sort排序命令呢?小编为大家分享了Linux使用sort排序命令的方法,下面大家跟着读文网小编一起来了解一下吧。
sort命令的功能是对文件中的各行进行排序。sort命令有许多非常实用的选项,这些选项最初是用来对数据库格式的文件内容进行各种排序操作的。实际上,sort命令可以被认为是一个非常强大的数据管理工具,用来管理内容类似数据库记录的文件。
Sort命令将逐行对文件中的内容进行排序,如果两行的首字符相同,该命令将继续比较这两行的下一字符,如果还相同,将继续进行比较。
语法:
sort [选项] 文件
说明:sort命令对指定文件中所有的行进行排序,并将结果显示在标准输出上。如不指定输入文件或使用“- ”,则表示排序内容来自标准输入。
sort排序是根据从输入行抽取的一个或多个关键字进行比较来完成的。排序关键字定义了用来排序的最小的字符序列。缺省情况下以整行为关键字按ASCII字符顺序进行排序。
改变缺省设置的选项主要有:
- m 若给定文件已排好序,合并文件。
- c 检查给定文件是否已排好序,如果它们没有都排好序,则打印一个出错信息,并以状态值1退出。
- u 对排序后认为相同的行只留其中一行。
- o 输出文件 将排序输出写到输出文件中而不是标准输出,如果输出文件是输入文件之一,sort先将该文件的内容写入一个临时文件,然后再排序和写输出结果。
改变缺省排序规则的选项主要有:
- d 按字典顺序排序,比较时仅字母、数字、空格和制表符有意义。
- f 将小写字母与大写字母同等对待。
- I 忽略非打印字符。
- M 作为月份比较:“JAN”<“FEB”
- r 按逆序输出排序结果。
+posl - pos2 指定一个或几个字段作为排序关键字,字段位置从posl开始,到pos2为止(包括posl,不包括pos2)。如不指定pos2,则关键字为从posl到行尾。字段和字符的位置从0开始。
- b 在每行中寻找排序关键字时忽略前导的空白(空格和制表符)。
- t separator 指定字符separator作为字段分隔符。
实例
代码如下:
[root@www ~]# cat /etc/passwd | sort #sort 是默认以第一个数据来排序,而且默认是以字符串形式来排序,所以由字母 a 开始升序排序。
代码如下:
[root@www ~]# cat /etc/passwd | sort -t ':' -k 3 #/etc/passwd 内容是以 : 来分隔的,我想以第三栏来排序,该如何
代码如下:
[root@www ~]# cat /etc/passwd | sort -t ':' -k 3n #用数字排序,默认是以字符串来排序的
代码如下:
[root@www ~]# cat /etc/passwd | sort -t ':' -k 3nr #倒序排列,默认是升序排序
代码如下:
[root@www ~]# ccat /etc/passwd | sort -t':' -k 6.2,6.4 -k 1r #对/etc/passwd,先以第六个域的第2个字符到第4个字符进行正向排序,再基于第一个域进行反向排序
代码如下:
[root@www ~]# cat /etc/passwd | sort -t':' -k 7 -u #查看/etc/passwd有多少个shell:对/etc/passwd的第七个域进行排序,然后去重
看过“ Linux怎么使用sort排序命令 ”
浏览量:3
下载量:0
时间:
sort命令的功能是对文件中的各行进行排序。sort命令有许多非常实用的选项,这些选项最初是用来对数据库格式的文件内容进行各种排序操作的。下面跟着读文网小编一起来了解一下吧。
1 sort的工作原理
sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
[rocrocket@rocrocket programming]$ cat seq.txt
banana
apple
pear
orange
[rocrocket@rocrocket programming]$ sort seq.txt
apple
banana
orange
pear
2 sort的-u选项
它的作用很简单,就是在输出行中去除重复行。
[rocrocket@rocrocket programming]$ cat seq.txt
banana
apple
pear
orange
pear
[rocrocket@rocrocket programming]$ sort seq.txt
apple
banana
orange
pear
pear
[rocrocket@rocrocket programming]$ sort -u seq.txt
apple
banana
orange
pear
pear由于重复被-u选项无情的删除了。
3 sort的-r选项
sort默认的排序方式是升序,如果想改成降序,就加个-r就搞定了。
[rocrocket@rocrocket programming]$ cat number.txt
1
3
5
2
4
[rocrocket@rocrocket programming]$ sort number.txt
1
2
3
4
5
[rocrocket@rocrocket programming]$ sort -r number.txt
5
4
3
2
1
4 sort的-o选项
由于sort默认是把结果输出到标准输出,所以需要用重定向才能将结果写入文件,形如sort filename > newfile。
但是,如果你想把排序结果输出到原文件中,用重定向可就不行了。
[rocrocket@rocrocket programming]$ sort -r number.txt > number.txt
[rocrocket@rocrocket programming]$ cat number.txt
[rocrocket@rocrocket programming]$
看,竟然将number清空了。
就在这个时候,-o选项出现了,它成功的解决了这个问题,让你放心的将结果写入原文件。这或许也是-o比重定向的唯一优势所在。
[rocrocket@rocrocket programming]$ cat number.txt
1
3
5
2
4
[rocrocket@rocrocket programming]$ sort -r number.txt -o number.txt
[rocrocket@rocrocket programming]$ cat number.txt
5
4
3
2
1
5 sort的-n选项
你有没有遇到过10比2小的情况。我反正遇到过。出现这种情况是由于排序程序将这些数字按字符来排序了,排序程序会先比较1和2,显然1小,所以就将10放在2前面喽。这也是sort的一贯作风。
我们如果想改变这种现状,就要使用-n选项,来告诉sort,“要以数值来排序”!
[rocrocket@rocrocket programming]$ cat number.txt
1
10
19
11
2
5
[rocrocket@rocrocket programming]$ sort number.txt
1
10
11
19
2
5
[rocrocket@rocrocket programming]$ sort -n number.txt
1
2
5
10
11
19
6 sort的-t选项和-k选项
如果有一个文件的内容是这样:
[rocrocket@rocrocket programming]$ cat facebook.txt
banana:30:5.5
apple:10:2.5
pear:90:2.3
orange:20:3.4
这个文件有三列,列与列之间用冒号隔开了,第一列表示水果类型,第二列表示水果数量,第三列表示水果价格。
那么我想以水果数量来排序,也就是以第二列来排序,如何利用sort实现?
幸好,sort提供了-t选项,后面可以设定间隔符。(是不是想起了cut和paste的-d选项,共鸣~~)
指定了间隔符之后,就可以用-k来指定列数了。
[rocrocket@rocrocket programming]$ sort -n -k 2 -t : facebook.txt
apple:10:2.5
orange:20:3.4
banana:30:5.5
pear:90:2.3
我们使用冒号作为间隔符,并针对第二列来进行数值升序排序,结果很令人满意。
7 其他的sort常用选项
-f会将小写字母都转换为大写字母来进行比较,亦即忽略大小写
-c会检查文件是否已排好序,如果乱序,则输出第一个乱序的行的相关信息,最后返回1
-C会检查文件是否已排好序,如果乱序,不输出内容,仅返回1
-M会以月份来排序,比如JAN小于FEB等等
-b会忽略每一行前面的所有空白部分,从第一个可见字符开始比较。
有时候学习脚本,你会发现sort命令后面跟了一堆类似-k1,2,或者-k1.2 -k3.4的东东,有些匪夷所思。今天,我们就来搞定它—-k选项!
1 准备素材
$ cat facebook.txt
google 110 5000
baidu 100 5000
guge 50 3000
sohu 100 4500
第一个域是公司名称,第二个域是公司人数,第三个域是员工平均工资。(除了公司名称,其他的别信,都瞎写的^_^)
2 我想让这个文件按公司的字母顺序排序,也就是按第一个域进行排序:(这个facebook.txt文件有三个域)
$ sort -t ‘ ‘ -k 1 facebook.txt
baidu 100 5000
google 110 5000
guge 50 3000
sohu 100 4500
看到了吧,就直接用-k 1设定就可以了。(其实此处并不严格,稍后你就会知道)
3 我想让facebook.txt按照公司人数排序
$ sort -n -t ‘ ‘ -k 2 facebook.txt
guge 50 3000
baidu 100 5000
sohu 100 4500
google 110 5000
不用解释,我相信你能懂。
但是,此处出现了问题,那就是baidu和sohu的公司人数相同,都是100人,这个时候怎么办呢?按照默认规矩,是从第一个域开始进行升序排序,因此baidu排在了sohu前面。
4 我想让facebook.txt按照公司人数排序 ,人数相同的按照员工平均工资升序排序:
$ sort -n -t ‘ ‘ -k 2 -k 3 facebook.txt
guge 50 3000
sohu 100 4500
baidu 100 5000
google 110 5000
看,我们加了一个-k2 -k3就解决了问题。对滴,sort支持这种设定,就是说设定域排序的优先级,先以第2个域进行排序,如果相同,再以第3个域进行排序。(如果你愿意,可以一直这么写下去,设定很多个排序优先级)
5 我想让facebook.txt按照员工工资降序排序,如果员工人数相同的,则按照公司人数升序排序:(这个有点难度喽)
$ sort -n -t ‘ ‘ -k 3r -k 2 facebook.txt
baidu 100 5000
google 110 5000
sohu 100 4500
guge 50 3000
此处有使用了一些小技巧,你仔细看看,在-k 3后面偷偷加上了一个小写字母r。你想想,再结合我们上一篇文章,能得到答案么?揭晓:r和-r选项的作用是一样的,就是表示逆序。因为sort默认是按照升序排序的,所以此处需要加上r表示第三个域(员工平均工资)是按照降序排序。此处你还可以加上n,就表示对这个域进行排序时,要按照数值大小进行排序,举个例子吧:
$ sort -t ‘ ‘ -k 3nr -k 2n facebook.txt
baidu 100 5000
google 110 5000
sohu 100 4500
guge 50 3000
看,我们去掉了最前面的-n选项,而是将它加入到了每一个-k选项中了。
6 -k选项的具体语法格式
要继续往下深入的话,就不得不来点理论知识。你需要了解-k选项的语法格式,如下:
[ FStart [ .CStart ] ] [ Modifier ] [ , [ FEnd [ .CEnd ] ][ Modifier ] ]
这个语法格式可以被其中的逗号(“,”)分为两大部分,Start部分和End部分。
先给你灌输一个思想,那就是“如果不设定End部分,那么就认为End被设定为行尾”。这个概念很重要的,但往往你不会重视它。
Start部分也由三部分组成,其中的Modifier部分就是我们之前说过的类似n和r的选项部分。我们重点说说Start部分的FStart和C.Start。
C.Start也是可以省略的,省略的话就表示从本域的开头部分开始。之前例子中的-k 2和-k 3就是省略了C.Start的例子喽。
FStart.CStart,其中FStart就是表示使用的域,而CStart则表示在FStart域中从第几个字符开始算“排序首字符”。
同理,在End部分中,你可以设定FEnd.CEnd,如果你省略.CEnd,则表示结尾到“域尾”,即本域的最后一个字符。或者,如果你将CEnd设定为0(零),也是表示结尾到“域尾”。
7 突发奇想,从公司英文名称的第二个字母开始进行排序:
$ sort -t ‘ ‘ -k 1.2 facebook.txt
baidu 100 5000
sohu 100 4500
google 110 5000
guge 50 3000
看,我们使用了-k 1.2,这就表示对第一个域的第二个字符开始到本域的最后一个字符为止的字符串进行排序。你会发现baidu因为第二个字母是a而名列榜首。sohu和 google第二个字符都是o,但sohu的h在google的o前面,所以两者分别排在第二和第三。guge只能屈居第四了。
8 又突发奇想,,只针对公司英文名称的第二个字母进行排序,如果相同的按照员工工资进行降序排序:
$ sort -t ‘ ‘ -k 1.2,1.2 -k 3,3nr facebook.txt
baidu 100 5000
google 110 5000
sohu 100 4500
guge 50 3000
由于只对第二个字母进行排序,所以我们使用了-k 1.2,1.2的表示方式,表示我们“只”对第二个字母进行排序。(如果你问“我使用-k 1.2怎么不行?”,当然不行,因为你省略了End部分,这就意味着你将对从第二个字母起到本域最后一个字符为止的字符串进行排序)。对于员工工资进行排 序,我们也使用了-k 3,3,这是最准确的表述,表示我们“只”对本域进行排序,因为如果你省略了后面的3,就变成了我们“对第3个域开始到最后一个域位置的内容进行排序” 了。
9 在modifier部分还可以用到哪些选项?
可以用到b、d、f、i、n 或 r。
其中n和r你肯定已经很熟悉了。
b表示忽略本域的签到空白符号。
d表示对本域按照字典顺序排序(即,只考虑空白和字母)。
f表示对本域忽略大小写进行排序。
i表示忽略“不可打印字符”,只针对可打印字符进行排序。(有些ASCII就是不可打印字符,比如a是报警,是退格,是换行,是回车等等)
10 思考思考关于-k和-u联合使用的例子:
$ cat facebook.txt
google 110 5000
baidu 100 5000
guge 50 3000
sohu 100 4500
这是最原始的facebook.txt文件。
$ sort -n -k 2 facebook.txt
guge 50 3000
baidu 100 5000
sohu 100 4500
google 110 5000
$ sort -n -k 2 -u facebook.txt
guge 50 3000
baidu 100 5000
google 110 5000
当设定以公司员工域进行数值排序,然后加-u后,sohu一行就被删除了!原来-u只识别用-k设定的域,发现相同,就将后续相同的行都删除。
$ sort -k 1 -u facebook.txt
baidu 100 5000
google 110 5000
guge 50 3000
sohu 100 4500
$ sort -k 1.1,1.1 -u facebook.txt
baidu 100 5000
google 110 5000
sohu 100 4500
这个例子也同理,开头字符是g的guge就没有幸免于难。
$ sort -n -k 2 -k 3 -u facebook.txt
guge 50 3000
sohu 100 4500
baidu 100 5000
google 110 5000
咦!这里设置了两层排序优先级的情况下,使用-u就没有删除任何行。原来-u是会权衡所有-k选项,将都相同的才会删除,只要其中有一级不同都不会轻易删除的:)(不信,你可以自己加一行sina 100 4500试试看)
11 最诡异的排序:
$ sort -n -k 2.2,3.1 facebook.txt
guge 50 3000
baidu 100 5000
sohu 100 4500
google 110 5000
以第二个域的第二个字符开始到第三个域的第一个字符结束的部分进行排序。
第一行,会提取0 3,第二行提取00 5,第三行提取00 4,第四行提取10 5。
又因为sort认为0小于00小于000小于0000….
因此0 3肯定是在第一个。10 5肯定是在最后一个。但为什么00 5却在00 4前面呢?(你可以自己做实验思考一下。)
答案揭晓:原来“跨域的设定是个假象”,sort只会比较第二个域的第二个字符到第二个域的最后一个字符的部分,而不会把第三个域的开头字符纳入比较范围。当发现00和00相同时,sort就会自动比较第一个域去了。当然baidu在sohu前面了。用一个范例即可证实:
$ sort -n -k 2.2,3.1 -k 1,1r facebook.txt
guge 50 3000
sohu 100 4500
baidu 100 5000
google 110 5000
12 有时候在sort命令后会看到+1 -2这些符号,这是什么东东?
关于这种语法,最新的sort是这么进行解释的:
On older systems, `sort’ supports an obsolete origin-zero syntax `+POS1 [-POS2]‘ for specifying sort keys. POSIX 1003.1-2001 (*note Standards conformance::) does not allow this; use `-k’ instead.
原来,这种古老的表示方式已经被淘汰了,以后可以理直气壮的鄙视使用这种表示方法的脚本喽!
(为了防止古老脚本的存在,在这再说一下这种表示方法,加号表示Start部分,减号表示End部分。最最重要的一点是,这种方式方法是从0开始计数的,以前所说的第一个域,在此被表示为第0个域。以前的第2个字符,在此表示为第1个字符。)
看过“ sort排序命令怎么使用 ”
浏览量:3
下载量:0
时间:
使用这个rm -rf删除文件的时候一定要格外小心,linux没有回收站的。
直接rm就可以了,不过要加个参数-f 即:rm -f 文件路径
-f 就是直接强行删除,不作任何提示的意思
删除文件使用实例:
rm -f /var/log/httpd/access.log
将会强制删除/var/log/httpd/access.log这个文件
删除目录使用实例:
rm -rf /var/log/httpd/access
将会删除/var/log/httpd/access目录以及其下所有文件、文件夹
需要提醒的是:使用这个rm -rf的时候一定要格外小心,linux没有回收站的
当然,rm还有更多的其他参数和用法,man rm就可以查看了
浏览量:1
下载量:0
时间:
less 与more命令类似,都可以通过翻页键查看上下页的内容,那么Linux的翻页命令more和less怎么使用呢?今天读文网小编与大家分享下Linux的翻页命令more和less使用的具体操作步骤,有需要的朋友不妨了解下。
more
more- 在显示器上阅读文件的过滤器[[ ]]
总览 (SYNOPSIS)
more[-dlfpcsu] [-num] [+/ pattern] [+ linenum] [file ...][[ ]]
描述 (DESCRIPTION)
More是 一个 过滤器, 用于 分页 显示 (一次一屏) 文本. 这个 版本 非常 基本. 用户 应该 知道 less(1) 提供了 more(1) 的 模拟, 并且 做了 增强.[[ ]]
选项 (OPTION)
下面 介绍 命令行选项. 选项 可以 从 环境变量MORE中获取 (要 确保 它们 以 短横线 开头 (``-)), 但是 命令行选项 能够 覆盖 它们.
-num
这个选项指定屏幕的行数 (以整数表示).
-d
让 more 给 用户 显示 提示信息 "[Press space to continue, 'q' to quit.]", 当 用户 按下 其他键 时, 显示 "[Press 'h' for instructions.]", 而不是 扬声器 鸣笛.
-l
More 在 通常情况下 把 ^L (form feed) 当做 特殊字符, 遇到 这个字符 就会 暂停. -l 选项 可以 阻止 这种特性.
-f
使 more 计数 逻辑行, 而不是 屏幕行 (就是说, 长行 不会 断到 下一行).
-p
不卷屏, 而是 清除 整个屏幕, 然后 显示 文本.
-c
不卷屏, 而是 从 每一屏的 顶部 开始 显示 文本, 每 显示完 一行, 就 清除 这一行的 剩余部分.
-s
把 重复的空行 压缩成 一个 空行.
-u
防止下划线.
+/
在 显示 每个文件 前, 搜索 +/ 选项 指定的 文本串.
+num
从行号 num 开始显示.
[[ ]]
命令 (COMMAND)
more的交互命令基于 vi(1). 有些命令 以 一个 十进制数字 开始, 在 下面的描述 里 称之为 k. 后面的 描述中, ^X 指 control-X.
h or ?
帮助: 显示 这些 命令 的 摘要. 你 如果 忘掉 所有 其他的命令, 请记住这个.
SPACE
显示 接下来的 k 行文本. 缺省值 是 当前的屏幕大小.
z
显示 接下来的 k 行文本. 缺省值 是 当前的屏幕大小. 参数 成为 新的缺省值.
RETURN
显示 接下来的 k 行文本. 缺省值 是 1. 参数 成为 新的缺省值.
d or ^D
卷屏 k 行. 缺省值 是 当前的 卷屏大小, 初始化为 11. 参数 成为 新的缺省值.
q 或 Q 或 INTERRUPT
退出.
s
向前跳过 k 行文本. 缺省值 是 1.
f
向前跳过 k 屏文本. 缺省值 是 1.
b or ^B
向后跳回 k 屏文本. 缺省值 是 1.
跳到 上一次 搜索 开始 的 地方.
=
显示当前行号.
/ pattern
搜索 第 k 个 符合 正则表达式的 文本串. 缺省值 是 1.
n
搜索 最后 第 k 个 符合 正则表达式的 文本串. 缺省值 是 1.
! or :!
在子 shell 中执行 .
v
启动 /usr/bin/vi, 指向 当前行.
^L
刷新屏幕.
:n
跳到 后面 第 k 个 文件. 缺省值 是 1.
:p
跳到 前面 第 k 个 文件. 缺省值 是 1.
:f
显示 当前文件名 和 行号.
.
重复上次命令.
[[ ]]
环境 (ENVIRONMENT)
More利用 下面的 环境变量 (如果 它们 存在):
MORE
这个变量 设置 你 喜欢的 more 选项.
SHELL
当前使用的 shell (一般说来 就是 登录 shell).
TERM
指定 终端类型, more 用它来 获取 操作屏幕 所需的 终端特性
例:
代码如下:
[root@localhost zhangy]# more test.php #查看文件
[root@localhost zhangy]# netstat -tpnl |more #常用方式,分页显示
less
less 与more命令类似,但可以通过翻页键查看上下页的内容
-b<缓冲区大小> 设置缓冲区的大小
-e 当文件显示结束后,自动离开
-f 强迫打开特殊文件,例如外围设备代号、目录和二进制文件
-g 只标志最后搜索的关键词
-i 忽略搜索时的大小写
-m 显示类似more命令的百分比
-N 显示每行的行号
-o<文件名> 将less 输出的内容在指定文件中保存起来
-Q 不使用警告音
-s 显示连续空行为一行
-S 行过长时间将超出部分舍弃
-x<数字> 将“tab”键显示为规定的数字空格
命令内部操作
按键功能如下:
b 向后翻一页
d 向后翻半页
h 显示帮助界面
Q 退出less 命令
u 向前滚动半页
y 向前滚动一行
空格键 滚动一行
回车键 滚动一页
1) 向前搜索
/ : 使用一个模式进行搜索,并定位到下一个匹配的文本
n : 向前查找下一个匹配的文本
N : 向后查找前一个匹配的文本
2) 向后搜索
? : 使用模式进行搜索,并定位到前一个匹配的文本
n : 向后查找下一个匹配的文本
N : 向前查找前一个匹配的文本
2 全屏导航
ctrl + F :向前移动一屏
ctrl + B :向后移动一屏
ctrl + D :向前移动半屏
ctrl + U :向后移动半屏
3 单行导航
j : 向前移动一行
k : 向后移动一行
4 其它导航
G : 移动到最后一行
g : 移动到第一行
q / ZZ : 退出 less 命令
5 编辑文件
v : 进入编辑模式,使用配置的编辑器编辑当前文件
6 标记导航
当使用 less 查看大文件时,可以在任何一个位置作标记,可以通过命令导航到标有特定标记的文本位置。
ma : 使用 a 标记文本的当前位置
'a : 导航到标记 a 处
7 浏览多个文件
方式一,传递多个参数给 less,就能浏览多个文件。
less file1 file2
方式二,正在浏览一个文件时,使用 :e 打开另一个文件。
less file1
:e file2
当打开多个文件时,使用如下命令在多个文件之间切换
:n - 浏览下一个文件
:p - 浏览前一个文件
例:
代码如下:
[root@localhost zhangy]# less test.php #查看文件
[root@localhost zhangy]# netstat -tpnl |less #常用方式,分页显示
看过“Linux的翻页命令more和less怎么使用”
浏览量:4
下载量:0
时间:
rsh命令用于连接到远程的指定主机并执行指定的命令。那么Linux中rsh怎么远程使用shell命令呢?读文网小编分享了Linux中rsh远程使用shell命令的方法,希望对大家有所帮助。
rsh有两种使用模式:
rsh $host : 远程登录,启动交互式进程。
rsh $host $command :远程执行命令,并显示输出。
rsh hosthostcommand
rsh $host $command的作用是:
1.在远程机器上执行命令$command
2.通过网络连接(socket)重定向当前进程和远端进程的标准输入和标准输出
3.远端rsh进程在远端进程结束后结束
4.本地rsh进程读取远端进程的标准输出直到结束(EOF)
深刻理解这个执行过程有助于理解各种“奇怪”的现象和用法。
代码如下:
+ Suspended (tty input)
$ rsh localhost infinite-loop &
[1] + Suspended (tty input) rsh pv007 infinite-loop
$ rsh -n localhost infinite-loop &
# 执行正常
后台执行rsh命令时,提示了和标准输入相关的错误信息。这是因为rsh默认会把当前窗口的标准输入重定向到远端进程。
而本地rsh进程作为后台程序运行的话,标准输入被“阻塞”了。
通过-n选项制定不需要重定向标准输入(stdin)。
远端进程的执行
执行命令
代码如下:
rsh somehost infinite-loop
在远端机器上查看相关进程:
代码如下:
$ pstree -a -p 3353
in.rshd,3353
└─csh,3363 -c infinite-loop
└─infinite-loop,3632 /u/szhang/bin/infinite-loop
可以看出,远端机器上的rshd进程负责启动远端进程。而且可以看出是通过csh -c的方式启动的(这里用户的默认Shell是C Shell)。
远端进程的标准IO
检查远端进程的文件描述符:
代码如下:
$ ls -l /proc/3363/fd /proc/3632/fd
/proc/3363/fd:
total 0
lrwx------. 1 Jul 30 23:47 16 -> socket:[1184748899]
lrwx------. 1 Jul 30 23:47 17 -> socket:[1184748899]
l-wx------. 1 Jul 30 23:47 18 -> pipe:[1184749092]
lrwx------. 1 Jul 30 23:47 19 -> socket:[1184748899]
代码如下:
/proc/3632/fd:
total 0
lrwx------. 1 Jul 30 23:47 0 -> socket:[1184748899]
lrwx------. 1 Jul 30 23:47 1 -> socket:[1184748899]
l-wx------. 1 Jul 30 23:47 2 -> pipe:[1184749092]
可以看出远端里程的标准输入输出是被重定向到socket上的:
1.stdin 和 stdout 共享一个socket连接
2.stderr 则通过一个pipe重定向(重定向到stdout ???)
3.rsh 的返回值
rsh程序自身的返回值表明的是rsh自身的运行状况,而不是远端进程的返回值。
获得远端进程的返回值
代码如下:
# 远端是C Shell
$ rsh $host "$command ; echo $status"
代码如下:
# 远端是Bash Shell
$ rsh $host "$command ; echo $?"
代码如下:
# 远端Shell类型不确定
$ rsh $host "sh -c '$command ; echo $?'"
启动远端进程所用的Shell
由于用于启动远端进程的Shell类型是未知的,而有些操作的语法在不同Shell里是不同的。
比如输入输出重定向、命令返回值等。
解决该问题的方法之一是通过明确指定的Shell来启动真正需要的里程。比如:
代码如下:
# 不确定远端Shell的类型,显式通过Bash Shell来启动需要的进程
$ rsh -n $host "sh -c '$command > /dev/null 2>&1'"
另一种思路,则是通过一个wrapper程序来启动真正的命令。
通过rsh在远端执行后台进程
想在远端机器上执行后台进程。命令rsh $host "$command &"是不起作用的,会导致本地的rsh进程不能结束。
背后的原因应该是,$command的标准输入输出通常仍然绑定在rsh连接的socket上,从而导致本地的rsh进程无法读取到文件结束符EOF。
知道了原因就知道该怎么办了,关键是关闭后台进程续定在rsh连接上的标准输入输出。
代码如下:
# 如果远端Shell是C Shell
$ rsh -n $host "$command >& /dev/null &"
代码如下:
# 如果远端Shell是Bash Shell
$ rsh -n $host "$command > /dev/null 2>&1 &"
代码如下:
# 不确定远端Shell的类型
$ rsh -n $host "sh -c '$command > /dev/null 2>&1 &'"
但上面这样重定向的办法有个缺点是不能得到任何远端进程的输出,而有时我们希望获得一些输出信息。
这时就需要远端进程能够以守护进程(daemon)的方式运行。
这种情况下,rsh命令可以简单地写作:$ rsh -n $host "$command &"
远端后台进程的内容用Tcl表示,大意如下:
代码如下:
#/bin/env tclsh
puts "I am a background job"
puts "This Can Be Seen by Remote rsh Process"
close stdout
close stderr
# rsh连接到此应该结束。
puts "This Can NOT Be Seen by Remote rsh Process"
更进就步,我们可以甚至忽略rsh命令中的后台运行符:$ rsh -n $host "$command"
这时远端进程需要通过fork的方式结束自己,并启动真正的后台进程(守护进程)。
rsh进程的阻塞和超时处理
在程序中调用rsh $host $command时可能由于各种奇怪的原因发生rsh进程的阻塞,这不是我们希望看到的。
我们希望设置一个超时(timeout)机制来解决这个问题。
在Tcl程序中的一种实现可以这样: TODO
TCP Connection连接数过多引起的rsh失败
监控邮件显示rsh $host $command命令失败,错误提示为“poll: protocol failure in circuit setup"
怀疑是网络连接数过多所引起。
rsh $host $command 的网络连接过程
命令rsh $host连接远程主机的513端口。
命令rsh $host $command则连接远程主机的514端口,并随后发送一个本地端口号给远程主机,要求远程主机建立一个新的TCP连接到这个端口(还不清楚这个新的连接有什么作用)。然后才是传送命令和等待命令结束。
这样做的结果就是在rsh $host $command进程过多时,本地开放的端口资源被消耗完了,从而导致新的rsh $host $command失败。
这是rsh $host的使用则依然正常。
这里提到的rsh的缺陷,也是建议尽量使用ssh的原因之一。
没有完全关闭的网络连接:
在远程主机上kill掉相关的rsh进程后,会导致TCP连接没有完全关闭。
netstat命令显示CLOSE_WAIT状态,端口资源并没有释放出来。
根据配置文件/proc/sys/net/ipv4/tcp_keepalive_time显示,需要等待2个小时,那些端口才会因为超时而被真正关闭,从而释放出来。
代码如下:
%> netstat -a | grep localhost
tcp 0 0 localhost:933 localhost:935 CLOSE_WAIT
%> cat /proc/sys/net/ipv4/tcp_keepalive_time
7200 ;# in seconds. = 2 hours
%> echo "net.ipv4.tcp_keepalive_time = 120" >> /etc/sysctl.con
看过“Linux中rsh怎么远程使用shell命令”
浏览量:3
下载量:0
时间:
如果你想成为Linux高手,那么掌握一些Linux命令是必不可少的。今天读文网小编与大家分享下学习Linux系统命令的具体使用步骤,有需要的朋友不妨了解下。
一、每日提示
学习Linux命令的一种渐进式方法是:在每次打开终端时,让它显示“每日提示”。这会向你介绍一些有用的命令及其高级使用技巧。
在.bashrc中(/home/.bashrc)增加如下一行:
echo “Did you know that:”; whatis $(ls /bin | shuf -n 1)
你只需要增加这行就够了!如果你想让它更娱乐化一些,你可以安装cowsay。Ubuntu/Debian下安装cowsay:
sudo apt-get install cowsay
Fedora下安装cowsay:
yum install cowsay
除了安装cowsay,还需要在.bashrc中增加:
cowsay -f $(ls /usr/share/cowsay/cows | shuf -n 1 | cut -d. -f1) $(whatis $(ls /bin) 2》/dev/null | shuf -n 1)
然而,上述使用cowsay的方法并不是在所有Linux发行版下均可运行成功。
二、使用“whatis”
如果你不喜欢学习随机的命令,或许你喜欢在使用某种命令的时候学习它的用法。这时你只需要在其前面加上whatis即可。Whatis会逐条的解释你输入的命令。
上图的whatis sudo yum install cheese例子清楚的告诉你:1)sudo是让你具有管理员权限;2)yun是软件包管理器;3)install是让YUM安装软件包;4)cheese是你打算安装的软件。这种方法在复杂的或者不常见的命令前执行的效果并不好。但是如果你想了解某个命令的大概用途,这种方法还是值得一试。
三、浏览命令的所有可用选项
如果你正在使用一个新的命令,那么有两种途径可以查看它的详细用法。一种途径是“man 《程序》”,其中《程序》是你要运行的程序名字。例如,“man cp”会在man文件浏览器中告诉你cp的详细用法。
另一种途径可以更快的查看某个命令的主要用法——“ -help”。例如,“cp -help”会在终端中直接打印出cp命令的大量用法。换句话讲,-help选项在所有的Linux命令中具有相同的含义。
四、速成班——是的,现在!
最后,你可以在这里学习Linux命令的语法!了解Linux命令的基本语法对于理解命令很有益处,很值得一学。
所有的Linux命令都具有相同的结构:[sudo] program [parameter] [parameter] … [parameter] [-flag] [parameter] [-flag] [parameter] … [flag] [parameter]
让我来分段剖析上述的结构:
1.如果一个命令需要管理员权限(root访问权限)才能运行,那么必须在它之前加上“sudo”。这使得在运行命令之输入管理员的密码。
2.“program”是应用程序的名字。它包括yum, apt-get, cheese, tar, cp, mv和firefox等等。如果没有经过额外的配置,所有可以通过这种方法访问的命令均放在/usr/bin目录下(译者注:默认情况下其它一些目录下的程序也可以这样运行,如/bin下的命令)。对于很多程序,你只需要在终端中输入其名字。例如,在终端中输入”firefox”,然后按Enter键,Firefox就运行起来了。
3.在程序名字的后面,你可以使用不同的参数和标志。不同程序在这方面差别很大。例如,命令“cp file1 file2”在file1的所在目录下将其复制一份并另存为file2。这里的“file1”和“file2”是命令“cp”的两个参数。一些命令也通过使用不同的标志来改变其行为。例如,命令“sudo yum install cheese -y”中的“install”是yum的参数,“cheese”是install的参数,“-y”是yum的标志——当yum询问你是否继续的时候,一律默认回答“yes”。需要注意的是,一些标志有自己的参数,而另一些则没有。这里就不给出具体的例子了。每个Linux名字都有自己的一套标志设定,掌握这些需要长时间的积累。
学习Linux系统命令的几种技巧就介绍完了,当然Linux系统的命令还有很多,掌握这些技巧可以节省学习Linux命令的时间。除此之外的实践和反复地训练也是必不可少的。
浏览量:2
下载量:0
时间:
cp 主要是用于在同一台电脑上,在不同的目录之间来回copy文件,那么Linux系统怎么使用cp命令呢?接下来大家跟着读文网小编一起来了解一下Linux系统使用cp命令的解决方法吧。
关于cp的具体用法:
命令基本格式:
cp [OPTIONS] SOURCE DEST --- 从源路径copy文件到目的路径
cp [OPTIONS] SOURCE... DIRECTORY --- 将多个源文件copy到指定的目录(多个源文件用空格分隔)
OPTIONS:
-a same as -dpR 尽可能将源文件状态、权限等资料都照原装予以复制,并且是递归copy;
-r 表示递归copy,若source中含有目录名,则将目录下之档案亦皆依序拷贝至目的地;
-f 表示force,若目的地已经有相同档名的档案存在,则在复制前先予以删除再行复制;
范例:
1. 将档案 aaa 复制(已存在),并命名为 bbb:
cp aaa bbb
2. 将所有的C语言程式拷贝至 Finished 子目录中:
cp *.c Finished/
关于scp的具体用法:
不同的Linux之间copy文件常用有3种方法:
第一种就是ftp,也就是其中一台Linux安装ftp Server,这样可以在另外一台机器使用ftp的client程序来进行文件的copy。
第二种方法就是采用samba服务,类似Windows文件copy 的方式来操作,比较简洁方便。
第三种就是利用scp命令来进行文件复制。
scp是有Security的文件copy,基于ssh登录。
命令基本格式:
scp [OPTIONS] file_source file_target
OPTIONS:
-v 和大多数 linux 命令中的 -v 意思一样 , 用来显示进度 . 可以用来查看连接、认证、 或是配置错误
-C 使能压缩选项
-P 选择端口 . 注意 -p 已经被 rcp 使用
从 本地 复制到 远程
scp /home/daisy/full.tar.gz root@172.19.2.75:/home/root (然后会提示你输入另外那台172.19.2.75主机的root用户的登录密码,接着就开始copy了),复制目录加参数 -r 即可
从 远程 复制到 本地
scp root@/172.19.2.75:/home/root/full.tar.gz /home/daisy/full.tar.gz
以下是补充:
命令:cp
使用权限:所有使用者
使用方式:
cp [options] source dest
cp [options] source... directory
说明:将一个档案拷贝至另一档案,或将数个档案拷贝至另一目录。
把计
-a 尽可能将档案状态、权限等资料都照原状予以复制。
-r 若 source 中含有目录名,则将目录下之档案亦皆依序拷贝至目的地。
-f 若目的地已经有相同档名的档案存在,则在复制前先予以删除再行复制。
范例:
将档案 aaa 复制(已存在),并命名为 bbb :
cp aaa bbb
将所有的C语言程式拷贝至 Finished 子目录中 :
cp *.c Finished
命令:scp
不同的Linux之间copy文件常用有3种方法:
第一种就是ftp,也就是其中一台Linux安装ftp Server,这样可以另外一台使用ftp的client程序来进行文件的copy。
第二种方法就是采用samba服务,类似Windows文件copy 的方式来操作,比较简洁方便。
第三种就是利用scp命令来进行文件复制。
scp是有Security的文件copy,基于ssh登录。操作起来比较方便,比如要把当前一个文件copy到远程另外一台主机上,可以如下命令。
scp /home/daisy/full.tar.gz root@172.19.2.75:/home/root
然后会提示你输入另外那台172.19.2.75主机的root用户的登录密码,接着就开始copy了。
如果想反过来操作,把文件从远程主机copy到当前系统,也很简单。
linux之cp/scp命令+scp命令详解(转) - linmaogan - 独木★不成林scp root@/full.tar.gz 172.19.2.75:/home/root/full.tar.gz home/daisy/full.tar.gz
linux 的 scp 命令 可以 在 linux 之间复制 文件 和 目录;
scp 命令
scp 可以在 2个 linux 主机间复制文件;
命令基本格式:
scp [可选参数] file_source file_target
从 本地 复制到 远程
* 复制文件:
* 命令格式:
scp local_file remote_username@remote_ip:remote_folder
或者
scp local_file remote_username@remote_ip:remote_file
或者
scp local_file remote_ip:remote_folder
或者
scp local_file remote_ip:remote_file
第1,2个指定了用户名,命令执行后需要再输入密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名;
第3,4个没有指定用户名,命令执行后需要输入用户名和密码,第3个仅指定了远程的目录,文件名字不变,第4个指定了文件名;
* 例子:
scp /home/space/music/1.mp3 root@www.cumt.edu.cn:/home/root/others/music
scp /home/space/music/1.mp3 root@www.cumt.edu.cn:/home/root/others/music/001.mp3
scp /home/space/music/1.mp3 www.cumt.edu.cn:/home/root/others/music
scp /home/space/music/1.mp3 www.cumt.edu.cn:/home/root/others/music/001.mp3
* 复制目录:
* 命令格式:
scp -r local_folder remote_username@remote_ip:remote_folder
或者
scp -r local_folder remote_ip:remote_folder
第1个指定了用户名,命令执行后需要再输入密码;
第2个没有指定用户名,命令执行后需要输入用户名和密码;
* 例子:
scp -r /home/space/music/ root@www.cumt.edu.cn:/home/root/others/
scp -r /home/space/music/ www.cumt.edu.cn:/home/root/others/
上面 命令 将 本地 music 目录 复制 到 远程 others 目录下,即复制后有 远程 有 ../others/music/ 目录
======
从 远程 复制到 本地
======
从 远程 复制到 本地,只要将 从 本地 复制到 远程 的命令 的 后2个参数 调换顺序 即可;
例如:
scp root@www.cumt.edu.cn:/home/root/others/music /home/space/music/1.mp3
scp -r www.cumt.edu.cn:/home/root/others/ /home/space/music/
最简单的应用如下 :
scp 本地用户名 @IP 地址 : 文件名 1 远程用户名 @IP 地址 : 文件名 2
[ 本地用户名 @IP 地址 :] 可以不输入 , 可能需要输入远程用户名所对应的密码 .
可能有用的几个参数 :
-v 和大多数 linux 命令中的 -v 意思一样 , 用来显示进度 . 可以用来查看连接 , 认证 , 或是配置错误 .
-C 使能压缩选项 .
-P 选择端口 . 注意 -p 已经被 rcp 使用 .
-4 强行使用 IPV4 地址 .
-6 强行使用 IPV6 地址 .
注意两点:
1.如果远程服务器防火墙有特殊限制,scp便要走特殊端口,具体用什么端口视情况而定,命令格式如下:
#scp -p 4588 remote@www.abc.com:/usr/local/sin.sh /home/administrator
2.使用scp要注意所使用的用户是否具有可读取远程服务器相应文件的权限。
看过“Linux系统怎么使用cp命令”
浏览量:3
下载量:0
时间:
vi命令是UNIX操作系统和类UNIX操作系统中最通用的全屏幕纯文本编辑器。那么Linux系统如何使用vi命令呢?接下来大家跟着读文网小编一起来了解一下Linux系统使用vi命令的解决方法吧。
一、一般模式:删除、复制与粘贴类命令
x,X x为向后删除一个字符,X为先前删除一个字符
nx(n代表数字) 向后删除n个字符
dd 删除当前行
D 删除当前行所有字符,试成为空行
ndd(n代表数字) 删除光标所在行的向下n列
d1G 删除光标所在行到第一行的所有数据
dG 删除光标所在行到最后一行的所有数据
yy 复制光标所在行
y1G 复制光标所在行到第一行的所有数据
yG 复制光标所在行到最后一行的所有数据
ynj(n代表数字) 复制光标所在行向下n+1行
dnj(n代表数字) 删除光标所在行向下n+1行
p,P p为复制的数据粘贴在光标的下一行,P为复制的数据粘贴在光标的上一行
J 将光标所在行与下一行的数据结合成一行
u 恢复前一个动作(undo)
二、编辑模式命令
i,I i为在当前光标所在处插入输入的文字,I为在光标所在行第一个非空字符插入输入的文字
a,A a为在当前光标所在处下一个字符插入输入的文字,A为在光标所在行最后一个字符的下一个字符处插入输入的文字
o,O o为在光标所在行的下一行行首开始插入字符,O为在光标所在行的上一行行首开始插入字符
r,R r为替换光标所在那一个字符,R为一直替换光标所指的文字,直到退出
Esc 退出,回到一般模式
三、命令模式
h 光标向左移一个字符
j 光标向下移一个字符
k 光标向上移一个字符
l 光标向右移一个字符
Ctrl+f 屏幕向下翻一页
Ctrl+b 屏幕向上翻一页
Ctrl+d 屏幕向下翻半页
Ctrl+u 屏幕向上翻半页
+ 光标移动到下一行的第一个非空字符
- 光标移动到当前行的第一个非空字符
n空格(n代表数字) 光标向当前行向右移动n个字符
0(数字0) 光标移动到当前行的第一个字符(可以为空字符,注意与-区分)
$ 光标移动到当前行的最后一个字符(可以为空字符,注意与-区分)
H 光标移动到当前屏幕最上方的那一行的第一个非空字符
M 光标移动到当前屏幕最中间那一行的第一个非空字符
L 光标移动到当前屏幕最下方的那一行的第一个非空字符
G 光标移动到该文章最后一行的第一个非空字符
nG(n代表数字) 光标移动到该文章第n行的第一个非空字符
n 光标从当前行向下移动n行的第一个非空字符
/word 在光标之后查找word字符串
?word 在光标之前查找word字符串
:s/word1/word2/g 在光标当前行查找word1,并替换成word2
:n1,n2s/word1/word2/g 在第n1行与第n2行之间查找word1,并替换成word2
:%s/word1/word2/g 整个文章查找word1,并替换成word2
:w 将编辑的数据保存到硬盘文件中
:w [filename] 将编辑后的数据保存到硬盘的另一个文件中
:r [filename] 在编辑数据时,读入另一个文件中的数据,即将filename文件中的内容加到光标所在行下一行
:wq或:x 保存并退出
:q 退出,适用于未修改的文件
:q! 强制退出,适用于修改文件后不保存退出
:set nu 显示行号
:set nonu 取消行号
:n1,n2 w [filename] 将n1到n2行的内容保存到名为filename的文件中
上面就是Linux中vi、vim命令的用法介绍了,本文简单的介绍了这两个命令的用法。
看过“Linux系统如何使用vi命令”
浏览量:3
下载量:0
时间:
在Linux系统中,我们通常使用的文件压缩命令有:bunzip2 , bzip2 , cpio , gunzip , gzip ,split(切割文件) , zgrep(在压缩文件中寻找匹配的正则表达式), zip ,unzip, tar ,rar。今天读文网小编给大家介绍下linux怎么使用压缩及解压缩命令吧。
tar zxvf XXXX.tar.gz
tar jxvf XXXX tar.bz2
1.压缩一组文件为tar.gz后缀。
# tar cvf backup.tar /etc #gzip -q backup.tar
或
# tar cvfz backup.tar.gz /etc/
2.释放一个后缀为tar.gz的文件。
#gunzip backup.tar.gz #tar xvf backup.tar
或
# tar xvfz backup.tar.gz
3.用一个命令完成压缩
#tar cvf - /etc/ | gzip -qc > backup.tar.gz
4.用一个命令完成释放
# gunzip -c backup.tar.gz | tar xvf -
5.如何解开tar.Z的文件?
# tar xvfz backup.tar.Z 或 # uncompress backup.tar.Z #tar xvf backup.tar
6.如何解开.tgz文件?
#gunzip backup.tgz
7.如何压缩和解压缩.bz2的包?
#bzip2 /etc/smb.conf
这将压缩文件smb.conf成smb.conf.bz2
#bunzip2 /etc/smb.conf.bz2
这将在当前目录下还原smb.conf.bz2为smb.conf
(bzip2 -d也一样)
注: .bz2压缩格式不是很常用,你可以man bzip2
下面复习一下。我们先人为做个文件夹出来,里面放置若干文件夹和文件:
我们首先创建一个tar文件,先压缩一个文件夹(testdir):
tar -cf testdir.tar testdir
然后列出该压缩包里的结构:
接着我们向这个压缩包追加文件:
当然了,上述单步操作没必要做了,压缩包里面已经有这个文件。
然后再看看这个压缩包里的结构:
如果使用示例中的-v选项,则会将压缩包里的文件属性全部列出。包括权限,创建人,字节大小,修改时间和文件名:
从tar压缩文件中解压并显示文件列表:
一般来说比较常用到的选项有主操作选项:
另外再练习一下其他的一些用法:
1、当压缩testdir目录的时候,需要将文件夹根路径内的test文件排除:
2、只压缩比指定时间更新的文件:
3、压缩所有文件名前缀为“te”的文件或文件夹(或者压缩后缀为“st”的文件):
最后补充一下常用的选项:
-p, --preserve-permissions, --same-permissions
保留解压文件权限信息(默认只为超级用户服务)
--preserve 与 -p 和 -s 一样
--same-owner 尝试解压时保持所有者关系一致(超级用户默认此项)
-r, --append 追加文件至归档结尾
-u, --update 仅追加比归档中副本更新的文件
-k, --keep-old-files 解压时不要替换存在的文件
--keep-newer-files
不要替换比归档中副本更新的已存在的文件
--no-overwrite-dir 保留已存在目录的元数据
--overwrite 解压时重写存在的文件
--overwrite-dir
解压时重写已存在目录的元数据(默认)
--recursive-unlink 解压目录之前先清除目录层次
--remove-files 在添加文件至归档后删除它们
-N, --newer=DATE-OR-FILE, --after-date=DATE-OR-FILE 只保存比 DATE-OR-FILE 更新的文件
2、rar:
rar - - <@listfiles...>
Linux系统的默认软件包里是不包含rar压缩工具的,所以我们先安装rar:
sudo apt-get install rar
选项只可以从给出的选项中输入一个(且只能一个),我们看一下它提供的命令列表:
使用举例,比如说现在我们要进行文件压缩:
在完成压缩之后,我们可以通过命令l获取压缩文件内具体的结构信息:
甚至可以通过命令p将压缩文件内的所有信息输出到控制台:
部分则提供了一些功能性的选项。
比如说以追加性的方式更新压缩文件可选用-ad:
或者说想把某个文件排除在外可以选用开关-x(注意,要排除的串要紧跟在x后面,不用加任何符号),比如我们这里想要将文件夹根路径下凡是“te”开头的文件都排除:
还有加密,用开关-p,同样的,密码紧随p后面即可:
如果相对文件进行解压或者直接打开文件,就会要求你输入密码:
除此之外,还有一些常用的选项有:
ag[format] Generate archive name using the current date
cl Convert names to lower case
cu Convert names to upper case
df Delete files after archiving
ed Do not add empty directories
dw Wipe files after archiving
其他的命令和开关可参照帮助手册。
看过“linux怎么使用压缩及解压缩命令”
浏览量:2
下载量:0
时间:
Linux可以利用df命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。 那么Linux怎么使用df命令查看磁盘空间呢?读文网小编分享了Linux使用df命令查看磁盘空间的方法,希望对大家有所帮助。
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda2 14G 11G 2.6G 82% /
/dev/sda1 99M 14M 81M 14% /boot
tmpfs 442M 275M 168M 63% /dev/shm
/dev/mapper/vg_test-lv_test
24M 1.3M 21M 6% /mnt/lvm
[root@localhost ~]#
当然你可能并不关系磁盘还剩余多少空间,你是需要知道当前的文件夹下的磁盘使用情况:
[root@localhost ~]# du --max-depth=1 -h
24K 。/.gnome www.2cto.com
8.0K 。/.eggcups
8.0K 。/.config
136K 。/.gnome2
16K 。/.chewing
8.0K 。/.gnome2_private
8.0K 。/.Trash
224K 。/.gstreamer-0.10
28K 。/Desktop
48K 。/.nautilus
48K 。/.metacity
240K 。/.scim
3.4M 。/.mozilla
1012K 。/.kde
12K 。/.superkaramba
40K 。/.local
8.0K 。/.qt
272K 。/.gconf
32K 。/.mcop
16K 。/.redhat
1.7M 。/.thumbnails
8.0K 。/.gconfd
7.5M 。
[root@localhost ~]#
看上面使用了du --max-depth=1 -h的命令来查找磁盘的使用情况,因为后面没有跟路径,它就默认是当前的路径。这个命令的-h参数是为了方便你读懂每个文件的大小,如果没有这个参数显示的文件大小就没有k,M,G等。执行命令后,前面n-1行的是该目录下每个文件夹的大小。最后一行显示的是该目录总的大小。
然后你会说不在乎该目录下每个文件的大小,你只想知道其中某一个文件(文件夹)的大小,那么有没有办法呢?当然你应该记得,我一直强调的,方法总比问题多,这儿也不例外。
请看下面的例子:
[root@localhost ~]# du -sh
7.5M 。 www.2cto.com
[root@localhost ~]#
聪明的你一定发现了这里显示的大小和上面最后一行的大小是一样的。这就是说这里显示的大小是该目录的总大小。
我知道你心里在冷笑,不是方法比问题多吗?这里说的也只有一个答案。当然,我不会让你失望的。另一个方法比较土,但是还是可以解决问题的。
[root@localhost ~]# du -h --max-depth=0
7.5M 。
[root@localhost ~]#
我想告诉你的是man手册里面已经告诉了:--max-depth=0的功能和-s的功能是一样的。
当然你也可以通过sed打印最后du -h --max-depth=1一行来解决问题,但我并不推荐。
这里涉及到一个原则,尽量使用命令提供选项的原始功能。如果命令没有提供该功能,才需要我们自己使用grep,sed,awk来选取我们需要的行。
当然du命令后面可以跟文件路径,来查看指定路径的大小的。
[root@localhost ~]# du -sh /opt/oracle
5.6G /opt/oracle
[root@localhost ~]#
上面就是使用df命令查看Linux磁盘空间的介绍了,如果磁盘比较大的话,那么可能就要花费更多一些的时间了
看过“Linux怎么使用df命令查看磁盘空间”
浏览量:2
下载量:0
时间:
Excel中经常需要为数据进行排序,利用公式具体该如何进行排序呢?下面是读文网小编带来的关于excel排序公式的使用教程,希望阅读过后对你有所启发!
步骤1:按公式为成绩排名,虽然大家知道RANK能用来排名,但是却不能处理复杂排名,这里小便提供一个简单公式: =RANK(B2,$B$2:$B$12)
步骤2:下面我来详细解释一哈,如何操作。看下面这幅图,排名有相同的成绩,这是简单rank不能处理的问题。所以我们要用复杂rank才可以处理
步骤3:B2指开头第一位成绩,B是成绩栏
步骤4:B12指最后一位成绩
步骤5:=RANK(B2,$B$2:$B$12),按这个步骤,可以在C2放入这个公式,回车即可。得出为5。如果不能显示,请查看公式复制时是否把空格给复制了。
步骤6:最后,下拉排名就ok了,鼠标放在黑点处,点左键下拉即可,成绩就这样简单的出来啦。相同排名的也向后拉了一位,大家看图就知道了。
浏览量:6
下载量:0
时间: